package it.fantacalcio.spring.service;

import it.fantacalcio.hibernate.dao.SquadraDAO;
import it.fantacalcio.hibernate.sessionfactory.HibernateSessionFactory;
import it.fantacalcio.model.Squadra;
import it.fantacalcio.model.User;

import java.util.List;

import org.hibernate.Transaction;

public class SquadraServiceImpl implements SquadraService {
	
	private SquadraDAO squadraDAO;
	
	public SquadraDAO getSquadraDAO() {
		return squadraDAO;
	}

	public void setSquadraDAO(SquadraDAO squadraDAO) {
		this.squadraDAO = squadraDAO;
	}
	
	//----------------------------------------------------------------------------------
	
	@Override
	public int salva(Squadra squadra) throws Exception {
		if(squadra==null){
			return -1;
		}
		try{
			Transaction tx = HibernateSessionFactory.getSession().beginTransaction();
				squadraDAO.save(squadra);
			tx.commit();
		}catch(Exception e){
			e.printStackTrace();
			return -2;
		}
		return 1;
	}
	
	@Override
	public int cancella(Squadra squadra) throws Exception {
		if(squadra==null || squadra.getId()<1){
			return -1;
		}
		try{
			Transaction tx = HibernateSessionFactory.getSession().beginTransaction();
				squadraDAO.delete(squadra);
			tx.commit();
		}catch(Exception e){
			e.printStackTrace();
			return -2;
		}
		return 1;
	}
	
	@Override
	public int modifica(Squadra squadra) throws Exception {
		if(squadra==null || squadra.getId()<1){
			return -1;
		}
		try{
			Transaction tx = HibernateSessionFactory.getSession().beginTransaction();
				squadraDAO.update(squadra);
			tx.commit();
		}catch(Exception e){
			e.printStackTrace();
			return -2;
		}
		return 1;
	}
	
	@Override
	public Squadra get(Long id) throws Exception {
		if(id<1){
			return null;
		}
		Transaction tx = HibernateSessionFactory.getSession().beginTransaction();
		Squadra squadra = squadraDAO.get(id);
		tx.commit();
		return squadra;
	}
	@Override
	public Squadra getByPresidente(User presidente) throws Exception {
		if(presidente == null || presidente.getId() < 1){
			return null;
		}
		Transaction tx = HibernateSessionFactory.getSession().beginTransaction();
		Squadra squadra = squadraDAO.getByUser(presidente);
		tx.commit();
		return squadra;
	}

	@Override
	public List<Squadra> list() throws Exception {
		Transaction tx = HibernateSessionFactory.getSession().beginTransaction();
		List<Squadra> result = squadraDAO.list();
		tx.commit();
		return result;
	}
	
	@Override
	public List<Squadra> findByExample(Squadra squadra) throws Exception {
		if(squadra==null){
			return null;
		}
		if(squadra.getCrediti()==0){
			squadra.setCrediti(null);
		}
		Transaction tx = HibernateSessionFactory.getSession().beginTransaction();
		List<Squadra> result = squadraDAO.findByExample(squadra);
		tx.commit();
		return result;
	}

}
